#include <fcntl.h> //file control
#include <stdio.h>
#include <unistd.h> //unistd.h头文件包含了POSIX操作系统API的函数原型，如open、read、write、close等
#include <stdlib.h> //stdlib.h头文件包含了标准库函数的原型，如exit、malloc、free等
void fn(int i) {
    //如果i为0u直接结束程序
    if(i==0)
    {
        exit(EXIT_FAILURE);
    }
}
int main() {
    //打开读文件
    int fd= open("love.txt", O_RDONLY);
    if(fd==-1) {
        printf("打开读文件失败\n");
        //打开失败
        // return -1;
        exit(EXIT_FAILURE);
    }
    //打开写文件
    int fd2 = open("love2.txt", O_WRONLY |O_APPEND |O_CREAT, 0664);
    if(fd2==-1) {
        printf("打开写文件失败\n");
        //关闭读文件
        close(fd);
        // return -1;
        // exit(EXIT_FAILURE);
        //系统调用，不进行关闭文件流，直接结束程序 
        _exit(EXIT_FAILURE);
    }
    //边读编写并输出到控制台
    char buf[1024];
    int read_size=0;
    while((read_size=read(fd, buf, 1024))>0) 
    {
        //写到love2.txt中
        write(fd2, buf, read_size);
        //输出到控制台  
        write(STDOUT_FILENO, buf, read_size);
    }
    if(read_size==-1) {
        printf("读取文件失败\n");
        //关闭文件
        close(fd);
        close(fd2);
        // return -1;
        exit(EXIT_FAILURE);
    }
    //关闭文件
    close(fd);
    close(fd2);
    // return 0;
    //内部会自动关闭文件流，但开发中一般都会手动关闭
    exit(EXIT_SUCCESS);
}